package core;

import java.util.HashMap;
import java.util.Map;

public final class OptionalParam {

    private Map<String, String> params;

    public OptionalParam() {
        init();
    }

    public OptionalParam(String inKey, Object inValue) {
        init().params.put(inKey, inValue.toString());
    }

    public OptionalParam(Map<String, String> input) {
        init().copyFrom(input);
    }

    private OptionalParam init() {
        params = new HashMap<>();
        return this;
    }

    public OptionalParam put(String inKey, Object inValue) {
        params.put(inKey, inValue.toString());
        return this;
    }

    public Object get(String inKey) {
        return params.get(inKey);
    }

    /**
     * 将当前对象的值复制到目标 map 中
     */
    public OptionalParam copyTo(Map<String, String> output) {
        if (output == null) {
            return this;
        }
        output.putAll(params);
        return this;
    }

    /**
     * 从目标 map 中复制出所有值到当前对象
     */
    public OptionalParam copyFrom(Map<String, String> input) {
        if (input == null) {
            return this;
        }
        params.putAll(input);
        return this;
    }

    /**
     * 从目标 对象 中复制出所有值到当前对象
     */
    public OptionalParam copyFrom(OptionalParam optionalParam) {
        if (optionalParam == null) {
            return this;
        }
        return copyFrom(optionalParam.getMap());
    }

    /**
     * 获取当前对象的 map 形式
     */
    public Map<String, String> getMap() {
        Map<String, String> copy = new HashMap<>();
        copy.putAll(params);
        return copy;
    }

    @Override
    public OptionalParam clone() {
        return new OptionalParam(getMap());
    }
}
